unit UContasReceberFt;

interface

uses Forms, UContasReceberCt, SysUtils, URequestContasReceber;

type
  TContasReceberFt = class(TObject)

    private

    public
      class procedure service(req : TRequestContasReceber);
      class function obterControle(req : TRequestContasReceber) : TContasReceberCt;
      class procedure verificarAcaoRequest(req : TRequestContasReceber; pObjContasReceberCt : TContasReceberCt);

end;

implementation

uses UContasReceberMd, FContasReceberFt, DB, DBGrids, FCrudContasReceber;

class procedure TContasReceberFt.service(req : TRequestContasReceber);
var
  controlador : TContasReceberCt;
begin
  controlador := self.obterControle(req);
  self.verificarAcaoRequest(req, controlador);
end;

class procedure TContasReceberFt.verificarAcaoRequest(req : TRequestContasReceber;  pObjContasReceberCt : TContasReceberCt);

begin
  if (req.acao = 'alterar') then
  begin
    with TFCrudContasReceberFt.Create(nil) do
    begin
      botaoSalvar.Visible := false;
      botaoAlterar.Visible := true;

      txtIdContasReceber.Text := IntToStr(req.id_contasreceber);
      txtDataRecebimento.Date := req.data_recebimento;
      txtValor.Text := FormatFloat('0.,00', req.valor);
      txtObservacoes.Lines.Text := req.observacoes;

      ShowModal;
      Free;
    end;
  end;

  if (req.acao = 'novo') then
  begin
    with TFCrudContasReceberFt.Create(nil) do
    begin
      botaoSalvar.Visible := true;
      botaoAlterar.Visible := false;
      ShowModal;
      Free;
    end;
  end;

  if (req.acao = 'inserir') then
  begin
    pObjContasReceberCt.inserirValorContasReceber(req);
    pObjContasReceberCt.inserirContasReceber;
  end;

  if (req.acao = 'atualizar') then
  begin
    pObjContasReceberCt.inserirValorContasReceber(req);
    pObjContasReceberCt.alterarContasReceber;  
  end;

  if (req.acao = 'excluir') then
  begin
    pObjContasReceberCt.excluirContasReceber(req)
  end;

  if (req.acao = 'exibir') then
  begin
    with TFCrudContasReceberFt.Create(nil) do
    begin
      botaoSalvar.Visible := false;
      botaoAlterar.Visible := false;

      txtIdContasReceber.Text := IntToStr(req.id_contasreceber);
      txtDataRecebimento.Date := req.data_recebimento;
      txtValor.Text := FormatFloat('0.,00', req.valor);
      txtObservacoes.Lines.Text := req.observacoes;

      txtIdContasReceber.Enabled := false;
      txtDataRecebimento.Enabled := false;
      txtValor.Enabled := false;
      txtObservacoes.Enabled := false;

      ShowModal;

      txtIdContasReceber.Enabled := true;
      txtDataRecebimento.Enabled := true;
      txtValor.Enabled := true;
      txtObservacoes.Enabled := true;

      Free;
    end;  
  end;

  if (req.acao = 'receber') then
  begin
      pObjContasReceberCt.receberContasReceber(req);
  end;

end;

class function TContasReceberFt.obterControle(req : TRequestContasReceber) : TContasReceberCt;
var
  lObjContasReceberCt : TContasReceberCt;
begin
  if (req.objContasReceberCt = nil) then
  begin
    lObjContasReceberCt := TContasReceberCt.Create;
    TContasReceberCt(req.objContasReceberCt) := lObjContasReceberCt;
  end
  else
    lObjContasReceberCt := TContasReceberCt(TFContasReceberFt(req.objContasReceberCt));

  result := lObjContasReceberCt;
end;

end.
